home *** CD-ROM | disk | FTP | other *** search
/ Night Owl 6 / Night Owl's Shareware - PDSI-006 - Night Owl Corp (1990).iso / 039a / oopbas.zip / OOPBASE.C next >
Text File  |  1991-08-22  |  7KB  |  221 lines

  1. /************************************************************************
  2.     oopbase.c
  3.  
  4.     Provided by
  5.     Silico-Magnetic Intelligence
  6.     914 426-2610     FAX: 914 426-3152
  7.  
  8.  
  9.     OOP Database demonstration program
  10.  
  11.     The following program shows the call sequence to
  12.     the OOP Database Library routines.
  13.  
  14.  
  15. ************************************************************************/
  16. /************************************************************************
  17. +    Unit Test Segment
  18. ************************************************************************/
  19. #include <stdio.h>
  20.  
  21. #define Test_limit      100L
  22. #define KEY_STOP
  23.  
  24. #define Test_message_1         "Better-C manages complexity."
  25. #define Test_message_2         "Better-C doubles productivity!"
  26. #define Create_bases          "Creating two databases...."
  27. #define Inserting_records    "Adding %ld records to each database...."
  28. #define Traverse_ascending   "\nTraverse database object %d in ascending order..."
  29. #define Traverse_descending  "\nTraverse database object %d in descending order..."
  30. #define Deleting_records     "\nDeleting records from %d to %d from each database...."
  31. #define Reinserting_records  "\nReinserting records from %d to %d into each database...."
  32. #define Access_records       "\nAccess records randomly from %d to %d by %d in each database...."
  33.  
  34. #define true         1
  35. #define false         0
  36. #define Line_len     81
  37. #define Line_feed     printf("\n");
  38. #define Clear_screen     system ("cls")
  39. #define Test_result     "\n\nObject handle: %d. Object numeric value: %d.\n\nObject message: %s\n"
  40. #define Not_found     "Record not found."
  41. #define File_1         "bctest1.db"
  42. #define File_2         "bctest2.db"
  43. #define Change_start     5
  44. #define Change_end       20
  45. #define Change_gap       2
  46. #define Key_pattern_1    "DB %d %5d: this is the KEY part"
  47. #define Key_pattern_2    "DB %d    %5d: KEY string"
  48. #define Record_pattern   "\n>%s|||%s<"
  49. #define Data_pattern_1     "DATA part %d...."
  50. #define Data_pattern_2   "DATA string %d ----"
  51. #define Base_header_1    "Better-C database sample 1 "
  52. #define Base_header_2    "Better-C database sample 2 "
  53.  
  54. void db_key_stop()
  55. {
  56. #ifdef KEY_STOP
  57.     getchar();
  58. #endif
  59. }
  60.  
  61.  
  62. void db_test();
  63. void db_traverse_ascending(int);
  64. void db_traverse_descending(int);
  65.  
  66. void main() {  db_test(); }
  67.  
  68. void db_test()
  69. /*----------------------------------------------------------------------
  70. Title:    Test database module by operating on two database objects
  71. -----------------------------------------------------------------------*/
  72. {
  73.     int handle_1, handle_2;
  74.         char key[ Line_len ], data[ Line_len];
  75.         long i;
  76.  
  77.     Clear_screen;
  78.  
  79.     handle_start();    /* object handle init */
  80.     db_start();        /* database init      */
  81.  
  82.         printf(Create_bases);  Line_feed;
  83.         db_create( File_1, Base_header_1);
  84.         db_create( File_2, Base_header_2);
  85.     printf (Inserting_records, Test_limit);
  86.         db_key_stop();
  87.  
  88.         handle_1 = db_open( File_1 );
  89.         handle_2 = db_open( File_2 );
  90.  
  91.         for (i = 0L; i < Test_limit; i++)
  92.           {
  93.           sprintf(key,  Key_pattern_1, handle_1, i);
  94.           sprintf(data, Data_pattern_1, 2 * i);
  95.       db_insert( handle_1, key, data);
  96.           sprintf(key,  Key_pattern_2, handle_2, i);
  97.           sprintf(data, Data_pattern_2, 3 * i);
  98.       db_insert( handle_2, key, data);
  99.           }
  100.  
  101.         db_traverse_ascending(handle_1);
  102.         db_traverse_ascending(handle_2);
  103.  
  104.         printf(Deleting_records, Change_start, Change_end);
  105.         Line_feed; db_key_stop();
  106.         for (i = Change_start; i <= Change_end; i++)
  107.         {
  108.           sprintf(key,  Key_pattern_1, handle_1, i);
  109.           db_delete(handle_1, key);
  110.           sprintf(key,  Key_pattern_2, handle_2, i);
  111.           db_delete(handle_2, key);
  112.         }
  113.  
  114.         db_traverse_ascending(handle_1);
  115.         db_traverse_ascending(handle_2);
  116.  
  117.         printf(Reinserting_records, Change_start, Change_end);
  118.         Line_feed; db_key_stop();
  119.  
  120.         for (i = Change_start; i <= Change_end; i++)
  121.           {
  122.           sprintf(key,  Key_pattern_1, handle_1, i);
  123.           sprintf(data, Data_pattern_1, 2 * i);
  124.       db_insert( handle_1, key, data);
  125.           sprintf(key,  Key_pattern_2, handle_2, i);
  126.           sprintf(data, Data_pattern_2, 3 * i);
  127.       db_insert( handle_2, key, data);
  128.           }
  129.         db_traverse_ascending(handle_1);
  130.         db_traverse_ascending(handle_2);
  131.         db_traverse_descending(handle_1);
  132.         db_traverse_descending(handle_2);
  133.  
  134.         db_close(handle_1);
  135.         db_close(handle_2);
  136.  
  137.         handle_1 = db_open( File_1 );
  138.         handle_2 = db_open( File_2 );
  139.  
  140.         printf(Access_records, Change_start, Change_end, Change_gap);
  141.         Line_feed; db_key_stop();
  142.         for (i = Change_start; i <= Change_end; i += Change_gap)
  143.           {
  144.              sprintf(key, Key_pattern_1, handle_1, i);
  145.       if ( (  db_read_key( handle_1, key, data)) == true)
  146.             printf(Record_pattern, key, data);
  147.       else
  148.         printf( Not_found);
  149.       sprintf(key, Key_pattern_2, handle_2, i);
  150.       if ( (  db_read_key( handle_2, key, data)) == true)
  151.             printf(Record_pattern, key, data);
  152.       else
  153.         printf( Not_found);
  154.     }
  155.  
  156.         Line_feed;
  157.     printf(Access_records, Change_end, Change_start, Change_gap);
  158.         Line_feed; db_key_stop();
  159.         for (i = Change_end; i >= Change_start; i -= Change_gap)
  160.           {
  161.              sprintf(key, Key_pattern_1, handle_1, i);
  162.       if ( (  db_read_key( handle_1, key, data)) == true)
  163.             printf(Record_pattern, key, data);
  164.       else
  165.         printf( Not_found);
  166.       sprintf(key, Key_pattern_2, handle_2, i);
  167.       if ( ( db_read_key( handle_2, key, data)) == true)
  168.             printf(Record_pattern, key, data);
  169.       else
  170.         printf( Not_found);
  171.           }
  172.  
  173.         db_close(handle_1);
  174.         db_close(handle_2);
  175.  
  176.     db_end();                      /* deinit database      */
  177.     handle_end();                  /* deinit object handle */
  178.         Line_feed; db_key_stop();
  179.     Clear_screen;
  180.  
  181. }
  182.  
  183. void db_traverse_ascending(int handle)
  184. /*----------------------------------------------------------------------
  185. Title:    Traverse and print database in ascending order
  186. -----------------------------------------------------------------------*/
  187. {
  188.         char key[ Line_len ], data[ Line_len];
  189.  
  190.     printf(Traverse_ascending, handle);
  191.         Line_feed; db_key_stop();
  192.         db_go_to_first(handle);
  193.         while (db_read_next(handle, key, data) == true)
  194.           printf(Record_pattern, key, data);
  195.     Line_feed;
  196. }
  197.  
  198. void db_traverse_descending(int handle)
  199. /*----------------------------------------------------------------------
  200. Title:    Traverse and print database in descending order
  201. -----------------------------------------------------------------------*/
  202. {
  203.         char key[ Line_len ], data[ Line_len];
  204.  
  205.     printf(Traverse_descending, handle);
  206.         Line_feed; db_key_stop();
  207.         db_go_to_last(handle);
  208.         while (db_read_previous(handle, key, data) == true)
  209.           printf(Record_pattern, key, data);
  210.     Line_feed;
  211. }
  212.  
  213. /************************************************************************
  214.     End of Unit Test Segment
  215. ************************************************************************/
  216.  
  217.  
  218. /************************************************************************
  219.     End of:    Object-oriented module algorithms
  220. ************************************************************************/
  221.